﻿namespace TestTool.Tests.Engine
{
    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Runtime.CompilerServices;
    using TestTool.Tests.Common.TestEngine;
    using TestTool.Tests.Definitions.Data;
    using TestTool.Tests.Definitions.Enums;
    using TestTool.Tests.Definitions.Interfaces;

    public class TestSuiteParameters
    {
        private string _address;
        private List<TestInfo> _allTestCases = new List<TestInfo>();
        private IPAddress _cameraIp;
        private string _cameraUUID;
        private bool _conformance;
        private bool _defineProfiles;
        private TestTool.Tests.Common.TestEngine.EnvironmentSettings _environmentSettings;
        private FeatureDefinitionMode _featureDefinition;
        private List<Feature> _features = new List<Feature>();
        private bool _interactiveFirst;
        private int _messageTimeout;
        private NetworkInterfaceDescription _nic;
        private IOperator _operator;
        private string _password;
        private List<IProfileDefinition> _profiles = new List<IProfileDefinition>();
        private string _ptzNodeToken;
        private int _rebootTimeout;
        private bool _repeatTests;
        private List<TestInfo> _testCases = new List<TestInfo>();
        private int _timeBetweenTests;
        private string _userName;
        private bool _useUTCTimestamp;
        private IVideoForm _videoForm;

        public string Address
        {
            get
            {
                return this._address;
            }
            set
            {
                this._address = value;
            }
        }

        public Dictionary<string, object> AdvancedParameters { get; set; }

        public List<TestInfo> AllTestCases
        {
            get
            {
                return this._allTestCases;
            }
        }

        public IPAddress CameraIP
        {
            get
            {
                return this._cameraIp;
            }
            set
            {
                this._cameraIp = value;
            }
        }

        public string CameraUUID
        {
            get
            {
                return this._cameraUUID;
            }
            set
            {
                this._cameraUUID = value;
            }
        }

        public bool Conformance
        {
            get
            {
                return this._conformance;
            }
            set
            {
                this._conformance = value;
            }
        }

        public bool DefineProfiles
        {
            get
            {
                return this._defineProfiles;
            }
            set
            {
                this._defineProfiles = value;
            }
        }

        public TestTool.Tests.Common.TestEngine.EnvironmentSettings EnvironmentSettings
        {
            get
            {
                return this._environmentSettings;
            }
            set
            {
                this._environmentSettings = value;
            }
        }

        public string EventTopic { get; set; }

        public FeatureDefinitionMode FeatureDefinition
        {
            get
            {
                return this._featureDefinition;
            }
            set
            {
                this._featureDefinition = value;
            }
        }

        public List<Feature> Features
        {
            get
            {
                return this._features;
            }
        }

        public bool InteractiveFirst
        {
            get
            {
                return this._interactiveFirst;
            }
            set
            {
                this._interactiveFirst = value;
            }
        }

        public int MessageTimeout
        {
            get
            {
                return this._messageTimeout;
            }
            set
            {
                this._messageTimeout = value;
            }
        }

        public string MetadataFilter { get; set; }

        public NetworkInterfaceDescription NetworkInterfaceController
        {
            get
            {
                return this._nic;
            }
            set
            {
                this._nic = value;
            }
        }

        public int OperationDelay { get; set; }

        public IOperator Operator
        {
            get
            {
                return this._operator;
            }
            set
            {
                this._operator = value;
            }
        }

        public string Password
        {
            get
            {
                return this._password;
            }
            set
            {
                this._password = value;
            }
        }

        public string Password1 { get; set; }

        public string Password2 { get; set; }

        public List<IProfileDefinition> Profiles
        {
            get
            {
                return this._profiles;
            }
        }

        public string PTZNodeToken
        {
            get
            {
                return this._ptzNodeToken;
            }
            set
            {
                this._ptzNodeToken = value;
            }
        }

        public int RebootTimeout
        {
            get
            {
                return this._rebootTimeout;
            }
            set
            {
                this._rebootTimeout = value;
            }
        }

        public string RecordingToken { get; set; }

        public int RecoveryDelay { get; set; }

        public int RelayOutputDelayTimeMonostable { get; set; }

        public bool RepeatTests
        {
            get
            {
                return this._repeatTests;
            }
            set
            {
                this._repeatTests = value;
            }
        }

        public string RetentionTime { get; set; }

        public int SearchTimeout { get; set; }

        public string SecureMethod { get; set; }

        public int SubscriptionTimeout { get; set; }

        public List<TestInfo> TestCases
        {
            get
            {
                return this._testCases;
            }
        }

        public int TimeBetweenTests
        {
            get
            {
                return this._timeBetweenTests;
            }
            set
            {
                this._timeBetweenTests = value;
            }
        }

        public string TopicNamespaces { get; set; }

        public bool UseEmbeddedPassword { get; set; }

        public string UserName
        {
            get
            {
                return this._userName;
            }
            set
            {
                this._userName = value;
            }
        }

        public bool UseUTCTimestamp
        {
            get
            {
                return this._useUTCTimestamp;
            }
            set
            {
                this._useUTCTimestamp = value;
            }
        }

        public IVideoForm VideoForm
        {
            get
            {
                return this._videoForm;
            }
            set
            {
                this._videoForm = value;
            }
        }

        public string VideoSourceToken { get; set; }
    }
}

